- (void)drawCF:(unsigned char)limit
{
	int i,j;
	
	unsigned char nc;		// No Ceiling Flag
	unsigned char mask;
	unsigned char b,v;
	unsigned char start;
	
	if (limit > 0x40) limit = 0x40;
	NSLog(@"Draw CF - Limit %02X",limit);
	
	// This needs the bank calculation for shared tileLayer data (cw used for now)
	
	nc = (cfCode >> 7); //NSLog(@"nc : %X",nc);
	
	ptr = [rom bytes] + 0x1C735 + ((cfCode & 0x0F) * 2) + 0x10; //NSLog(@"maskCode : %02X",*ptr);
	
	if (nc == 0) { mask = 0xE0; start = 0; }
	else { mask = 0x38; start = 2; }
	b = *ptr;
	for (i=start; i<6; i++) {
		v = (b & mask) >> (5 - i);
		mask >>= 1;
		//NSLog(@"Row %X : %02X (%02X)",i,v,tileLayers[cw][layerGroup][v]);
		for (j=cfOffset; j<limit; j++) {
			if (tileLayers[cw][layerGroup][v] == 0x40) continue;
			[[self cellAtRow:i column:j] setImage:[tiles objectAtIndex:tileLayers[cw][layerGroup][v]]]; //[self display];
		}
	}
	
	mask = 0xE0;
	b = *(ptr + 1);
	for (i=0; i<6; i++) {
		v = (b & mask) >> (5 - i);
		mask >>= 1;
		//NSLog(@"Row %X : %02X (%02X)",i+6,v,tileLayers[cw][layerGroup][v]);
		for (j=cfOffset; j<limit; j++) {
			if (tileLayers[cw][layerGroup][v] == 0x40) continue;
			[[self cellAtRow:i+6 column:j] setImage:[tiles objectAtIndex:tileLayers[cw][layerGroup][v]]]; //[self display];
		}
	}
	
	for (i=cfOffset; i<limit; i++) {
		[[self cellAtRow:0xC column:i] setImage:[tiles objectAtIndex:tileLayers[cw][layerGroup][8]]]; //[self display];
	}
	
	//if (limit > cfOffset)
	cfOffset = limit;
	
	//NSLog(@"----");
}